package com.ruoyi.game.core.card;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Data
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
public class CardPower implements Comparable<CardPower> {
    private int cardType;   // 1 单张, 2 对子, 3 拖拉机, 4 甩牌
    private int colorLevel; // 1 副牌, 2 主牌
    private int maxValue;   // 最大牌值（考虑主牌、大小王）
    private List<Integer> originCards; // 原始出牌列表
    @Override
    public int compareTo(CardPower other) {
        String thisDesc = BasePoker.toCardString(this.originCards);
        String otherDesc = BasePoker.toCardString(other.originCards);

        log.info("[CardCompare] 比较牌力：当前={}，对比={}", this, other);
        log.info("[CardCompare] 当前牌={}（牌型={}, 花色={}, 最大值={}），对比牌={}（牌型={}, 花色={}, 最大值={}）",
                thisDesc, cardType, colorLevel, maxValue,
                otherDesc, other.cardType, other.colorLevel, other.maxValue);

        // 1. 优先比较牌型
        int result = Integer.compare(this.cardType, other.cardType);
        if (result != 0) {
            if (result > 0) {
                log.info("[CardCompare] 当前牌型（{}）优于对比牌型（{}） → 当前胜", cardType, other.cardType);
            } else {
                log.info("[CardCompare] 当前牌型（{}）劣于对比牌型（{}） → 当前负", cardType, other.cardType);
            }
            return result;
        }

        // 2. 比较花色类型（主 > 副）
        result = Integer.compare(this.colorLevel, other.colorLevel);
        if (result != 0) {
            if (result > 0) {
                log.info("[CardCompare] 当前为主牌（{}）优于对比副牌（{}） → 当前胜", colorLevel, other.colorLevel);
            } else {
                log.info("[CardCompare] 当前为副牌（{}）劣于对比主牌（{}） → 当前负", colorLevel, other.colorLevel);
            }
            return result;
        }


        // 3️⃣ 如果是副牌，必须保证花色一致，否则判负
        if (this.colorLevel == 1 /* 副牌 */) {
            int thisColor = BasePoker.getCardColor(this.originCards.get(0));
            int otherColor = BasePoker.getCardColor(other.originCards.get(0));
            if (thisColor != otherColor) {
                log.warn("[CardCompare] 副牌花色不一致 → 当前({}) vs 对比({}) → 当前负", thisColor, otherColor);
                return -1;
            }
        }

        // 4️⃣ 比较最大牌值
        result = Integer.compare(this.maxValue, other.maxValue);
        if (result > 0) {
            log.info("[CardCompare] 当前最大值（{}）大于对比最大值（{}） → 当前胜", maxValue, other.maxValue);
        } else if (result < 0) {
            log.info("[CardCompare] 当前最大值（{}）小于对比最大值（{}） → 当前负", maxValue, other.maxValue);
        } else {
            log.info("[CardCompare] 当前最大值与对比相等（{}） → 平局", maxValue);
        }

        return result;
    }
}
